import type { 
  IApiResponse, 
  IApiPaginatedResponse, 
  IBatchRequest, 
  IBatchResponse
} from '../common/api';
import type { IPaginatedQuery } from '../common/pagination';
import type { 
  IStudent, 
  IStudentCreateRequest, 
  IStudentUpdateRequest, 
  IStudentQueryParams,
  IStudentStatistics,
  IStudentSummary 
} from './student';

/**
 * 获取学生列表 API 响应
 * @description 分页获取学生列表的响应类型
 */
export type IGetStudentsResponse = IApiPaginatedResponse<IStudent>;

/**
 * 获取学生详情 API 响应
 * @description 获取单个学生详情的响应类型
 */
export type IGetStudentResponse = IApiResponse<IStudent>;

/**
 * 创建学生 API 响应
 * @description 创建学生的响应类型
 */
export type ICreateStudentResponse = IApiResponse<IStudent>;

/**
 * 更新学生 API 响应
 * @description 更新学生信息的响应类型
 */
export type IUpdateStudentResponse = IApiResponse<IStudent>;

/**
 * 删除学生 API 响应
 * @description 删除学生的响应类型
 */
export type IDeleteStudentResponse = IApiResponse<{ id: string }>;

/**
 * 获取学生统计 API 响应
 * @description 获取学生统计信息的响应类型
 */
export type IGetStudentStatisticsResponse = IApiResponse<IStudentStatistics>;

/**
 * 获取学生简要列表 API 响应
 * @description 获取学生简要信息列表的响应类型
 */
export type IGetStudentSummariesResponse = IApiResponse<IStudentSummary[]>;

/**
 * 学生查询请求参数
 * @description 查询学生列表的请求参数
 */
export type IStudentListRequest = IPaginatedQuery<IStudentQueryParams>;

/**
 * 批量学生操作请求
 * @description 批量操作学生的请求参数
 */
export type IStudentBatchRequest = IBatchRequest<string>;

/**
 * 批量学生操作响应
 * @description 批量操作学生的响应类型
 */
export type IStudentBatchResponse = IApiResponse<IBatchResponse<string>>;

/**
 * 学生导入请求
 * @description 批量导入学生数据的请求参数
 */
export interface IStudentImportRequest {
  /** 导入的学生数据列表 */
  students: IStudentCreateRequest[];
  /** 是否覆盖已存在的学生（根据学号判断） */
  overwrite?: boolean;
  /** 导入模式 */
  mode?: 'create' | 'update' | 'upsert';
}

/**
 * 学生导入响应
 * @description 批量导入学生数据的响应类型
 */
export interface IStudentImportResponse {
  /** 成功导入的学生数量 */
  successCount: number;
  /** 失败的学生数量 */
  failedCount: number;
  /** 成功导入的学生列表 */
  successList: IStudent[];
  /** 失败的学生信息 */
  failedList: Array<{
    /** 学生数据 */
    student: IStudentCreateRequest;
    /** 失败原因 */
    reason: string;
  }>;
}

/**
 * 学生导出请求
 * @description 导出学生数据的请求参数
 */
export interface IStudentExportRequest {
  /** 导出的学生ID列表，为空则导出所有 */
  studentIds?: string[];
  /** 导出格式 */
  format?: 'json' | 'csv' | 'excel';
  /** 导出字段 */
  fields?: Array<keyof IStudent>;
  /** 筛选条件 */
  filters?: IStudentQueryParams;
}

/**
 * 学生搜索建议响应
 * @description 学生搜索建议的响应类型
 */
export interface IStudentSearchSuggestion {
  /** 学生ID */
  id: string;
  /** 学生姓名 */
  name: string;
  /** 学号 */
  studentId: string;
  /** 年级班级 */
  gradeClass?: string;
  /** 匹配的字段 */
  matchField: 'name' | 'studentId' | 'phone' | 'parentName';
}

/**
 * 学生搜索建议 API 响应
 * @description 获取学生搜索建议的响应类型
 */
export type IGetStudentSuggestionsResponse = IApiResponse<IStudentSearchSuggestion[]>;